<?php

namespace Rebecca\RebeccaBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Rebecca\RebeccaBundle\Entity\Trabajadores;
use Rebecca\RebeccaBundle\Form\TrabajadoresType;
use Rebecca\RebeccaBundle\Form\TrabajadoresFullType;
use Rebecca\RebeccaBundle\Entity\DocumentosEmpleado;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Response;

/**
 * Trabajadores controller.
 * 
 */
class TrabajadoresController extends Controller {

    private static $destination = "uploads/DocumentosTrabajadores/";

    /**
     * Lists all Trabajadores entities.
     *
     */
    public function indexAction() {
        /* @var $component Rebecca\RebeccaBundle\Component\TrabajadoresComponent */
        $component = $this->get("components.Trabajadores");
        $entities = $component->getAll();

        return $this->render('RebeccaBundle:Trabajadores:index.html.twig', array(
                    'entities' => $entities
                ));
    }

    /**
     * Finds and displays a Trabajadores entity.
     *
     */
    public function showAction($id) {
        /* @var $component \Rebecca\RebeccaBundle\Component\TrabajadoresComponent */
        $component = $this->get("components.Trabajadores");

        /* @var $entity Trabajadores */
        $entity = $component->getFull($id);

        $contrato = new \Rebecca\RebeccaBundle\Entity\Contratos();

        $hayContrato = false;

        $idContrato = $entity->getContratos();
        $documentos = array();

        if (!empty($idContrato)) {
            $idContrato = $idContrato[0]->getId();
            $contrato = $component->getContrato($idContrato);
            $hayContrato = true;
            $documentos = $component->getDocumentos($idContrato);
        }

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Trabajadores entity.');
        }

        $deleteForm = $this->createDeleteForm($id);
        $uploadFileForm = $this->createFormBuilder()
                ->add("archivo", "file")
                ->add("contrato", "hidden", array("data" => $idContrato,))
                ->getForm();

        return $this->render('RebeccaBundle:Trabajadores:show.html.twig', array(
                    'entity' => $entity,
                    'contratoActual' => $contrato,
                    'hayContrato' => $hayContrato,
                    'delete_form' => $deleteForm->createView(),
                    "upload_file_form" => $uploadFileForm->createView(),
                    "documentos" => $documentos,
                ));
    }

    public function uploadAction($id) {
        $uploadFileForm = $this->createFormBuilder()
                ->add("archivo", "file")
                ->add("contrato", "hidden")
                ->getForm();

        $uploadFileForm->bindRequest($this->getRequest());

        if ($uploadFileForm->isValid()) {
            /* @var $value \Symfony\Component\Form\Form */
            $value = $uploadFileForm->get("archivo");
            $file = $value->getData();
            
            if ($file instanceof UploadedFile && $file->isValid()) {
                /* @var $component \Rebecca\RebeccaBundle\Component\TrabajadoresComponent */
                $component = $this->get("components.Trabajadores");

                $idContrato = $uploadFileForm->get("contrato")->getData();
                $contrato = $component->getContrato($idContrato);

                $archivo = new DocumentosEmpleado();
                $archivo->setNombreArchivo($file->getClientOriginalName());
                $archivo->setMime($file->getClientMimeType());
                $archivo->setIdContrato($contrato);
                $archivo->setDirectorio(self::$destination);
                $archivo->setFechaCreacion(date_create());

                $component->agregarDocumento($archivo);
                $component->commit();

                $fileName = "{$archivo->getId()}.{$archivo->getExtension()}";
                $file->move($archivo->getDirectorio(), $fileName);
            }
        }

        return $this->showAction($id);
    }

    public function downloadAction($id) {
        /* @var $component \Rebecca\RebeccaBundle\Component\TrabajadoresComponent */
        $component = $this->get("components.Trabajadores");

        /* @var $archivo DocumentosEmpleado */
        $archivo = $component->getDocumento($id);

        $filename = self::$destination . "{$archivo->getId()}.{$archivo->getExtension()}";

        $response = new Response();
        $response->headers->add(array(
            "Content-type" => $archivo->getMime(),
            "Content-Disposition" => "attachment;filename={$archivo->getNombreArchivo()}",
            "Content-Transfer-Encoding" => "binary",
            'Pragma' => 'no-cache',
            'Expires' => '0',
        ));

        // Send the file contents.
        set_time_limit(0);
        $response->setContent(readfile($filename));

        return $response;
    }
    /*volante de pago: escribir cedula -> seleccionar periodo -> rumera de conceptos liquidados
     * entidad centro de costo: ->
     */
    function borrarArchivoAction($id) {
        throw new Exception("Not implemented yet");
        /* @var $component \Rebecca\RebeccaBundle\Component\TrabajadoresComponent */
        $component = $this->get("components.Trabajadores");
        /* @var $documento DocumentosEmpleado */
        $documento = $component->getDocumento($id);
        
        $filename = "{$documento->getDirectorio()}{$documento->getId()}.{$documento->getExtension()}";
        unlink($filename);
        
        $component->eliminarDocumento($id);
        
    }

    /**
     * Displays a form to create a new Trabajadores entity.
     *
     */
    public function newAction() {
        $entity = new Trabajadores();
        $form = $this->createForm(new TrabajadoresType(), $entity);

        return $this->render('RebeccaBundle:Trabajadores:new.html.twig', array(
                    'entity' => $entity,
                    'form' => $form->createView()
                ));
    }

    /**
     * Creates a new Trabajadores entity.
     *
     */
    public function createAction() {
        $entity = new Trabajadores();
        $request = $this->getRequest();
        $form = $this->createForm(new TrabajadoresType(), $entity);
        $form->bindRequest($request);

        if ($form->isValid()) {
            /* @var $component Rebecca\RebeccaBundle\Component\TrabajadoresComponent */
            $component = $this->get("components.Trabajadores");
            $component->save($entity);
            $component->commit();

            return $this->redirect($this->generateUrl('contratos_new', array('id' => $entity->getId())));
        }

        return $this->render('RebeccaBundle:Trabajadores:new.html.twig', array(
                    'entity' => $entity,
                    'form' => $form->createView()
                ));
    }

    /**
     * Displays a form to edit an existing Trabajadores entity.
     *
     */
    public function editAction($id) {
        /* @var $component Rebecca\RebeccaBundle\Component\TrabajadoresComponent */
        $component = $this->get("components.Trabajadores");
        $entity = $component->get($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Trabajadores entity.');
        }

        $editForm = $this->createForm(new TrabajadoresFullType(), $entity);
        $deleteForm = $this->createDeleteForm($id);

        return $this->render('RebeccaBundle:Trabajadores:edit.html.twig', array(
                    'entity' => $entity,
                    'edit_form' => $editForm->createView(),
                    'delete_form' => $deleteForm->createView(),
                ));
    }

    /**
     * Edits an existing Trabajadores entity.
     *
     */
    public function updateAction($id) {
        /* @var $component Rebecca\RebeccaBundle\Component\TrabajadoresComponent */
        $component = $this->get("components.Trabajadores");

        $entity = $component->get($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Trabajadores entity.');
        }

        $editForm = $this->createForm(new TrabajadoresFullType(), $entity);
        $deleteForm = $this->createDeleteForm($id);

        $request = $this->getRequest();

        $editForm->bindRequest($request);

        if ($editForm->isValid()) {
            $component->update($entity);
            $component->commit();

            return $this->redirect($this->generateUrl('trabajadores_show', array('id' => $entity->getId())));
        }

        return $this->render('RebeccaBundle:Trabajadores:edit.html.twig', array(
                    'entity' => $entity,
                    'edit_form' => $editForm->createView(),
                    'delete_form' => $deleteForm->createView(),
                ));
    }

    /**
     * Deletes a Trabajadores entity.
     *
     */
    public function deleteAction($id) {
        $form = $this->createDeleteForm($id);
        $request = $this->getRequest();

        $form->bindRequest($request);

        if ($form->isValid()) {
            /* @var $component Rebecca\RebeccaBundle\Component\TrabajadoresComponent */
            $component = $this->get("components.Trabajadores");
            $entity = $component->get($id);

            if (!$entity) {
                throw $this->createNotFoundException('Unable to find Trabajadores entity.');
            }

            $component->delete($entity);
            $component->commit();
        }

        return $this->redirect($this->generateUrl('trabajadores'));
    }

    private function createDeleteForm($id) {
        return $this->createFormBuilder(array('id' => $id))
                        ->add('id', 'hidden')
                        ->getForm()
        ;
    }

}
